/**
 * 封装axios
 */
// 导入axios实例
import axios from 'axios'

// js中获取vuex的数据
// 导入vuex实例
import store from '@/store/index'
import router from '@/router'
// import { getToken } from './auth'
// 1. 创建新的axios

import { Message } from 'element-ui'

export const baseURL = 'http://big-event-vue-api-t.itheima.net'
const request = axios.create({
  // 配置后台基础地址
  baseURL
})
// 添加请求拦截器=》请求发送前执行
request.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // console.log('1.开始发请求了')
  // 场景：判断给需要添加header参数值的接口，添加token
  // 需求：接口请求url 以 /my 开头，都需要添加header参数
  if (config.url.startsWith('/my')) {
    // 给header添加属性名和值
    // store===等价于 在组件中使用的 this.$store
    config.headers.Authorization = store.state.user.token
    // config.headers.Authorization = getToken()
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器=》发送请求之后
request.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  // console.log('2.请求成功了', response)
  return response
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  // 需求：在token失效或者假token会报401状态码

  // 解决：多个接口请求401重复跳转登录页
  if (error.response.status === 401) {
    // 判断如果已经跳回登录页了，后面代码不执行
    // 使用router实例:router.currentRoute.path获取当前访问页面地址
    if (router.currentRoute.path === '/login') return
    Message.error('token失效，请重新登录')
    // * 1. 删除token =》怎么删除vuex存的token？=》导入vuex实例
    //  * 2. 跳回登录页=> js怎么跳页面？=》导入router实例
    // * 3. 添加token 失效提示消息，js用法
    store.commit('user/delToken')
    router.replace('/login')
  }
  return Promise.reject(error)
})
//  2. 默认导出新的axios
export default request
// 按需导出默认地址
//  { baseURL }
